/**
 * created by 小卷毛, 2020/10/15
 * Copyright (c) 2020, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.sgcc.pda.lib_tools_database.factory;

import android.text.TextUtils;

import com.sgcc.pda.lib_tools_database.bean.other.AppNoForPlan;
import com.sgcc.pda.lib_tools_database.gen.AppNoForPlanDao;
import com.sgcc.pda.lib_tools_database.gen.DaoSession;

import org.greenrobot.greendao.Property;

import java.util.List;

/**
 * 描 述：工单号与工作计划关系表操作类
 * 作 者：小卷毛  2020-10-15 19:00
 * 修改描述：增加表字段查询
 * 修 改 人：
 * 修改版本：v1.2.1
 */
public class AppNoForPlanImpl extends Abstractable<AppNoForPlan, AppNoForPlanDao> {

    @Override
    public AppNoForPlanDao getDao(DaoSession session) {
        return session.getAppNoForPlanDao();
    }

    /**
     * 插入单个数据
     */
    public void insertData(
            String appNo,
            String planNo,
            String appCode,
            String eomOrderSrc,
            String workTypeNo,
            String wtNo,
            String wtExist,
            String meetingRequire,
            String riskRequire
    ) {
        if (!TextUtils.isEmpty(planNo)
                && !TextUtils.isEmpty(wtNo)) {
            AppNoForPlan data = new AppNoForPlan();
            data.setPlanNo(planNo);
            data.setAppNo(appNo);
            data.setAppCode(appCode);
            data.setEomOrderSrc(eomOrderSrc);
            data.setWorkTypeNo(workTypeNo);
            data.setWtNo(wtNo);
            data.setWtExist(wtExist);
            data.setMeetingRequire(meetingRequire);
            data.setRiskRequire(riskRequire);

            insert(data);
        }
    }

    /**
     * 根据工单号删除多余数据
     */
    public void deleteByAppNo(
            String appNo,
            String appCode,
            String eomOrderSrc,
            String workTypeNo
    ) {
        if (!TextUtils.isEmpty(appNo)) {
            List<AppNoForPlan> list = findByParam(
                    new Property[]{AppNoForPlanDao.Properties.AppNo},
                    new String[]{appNo});

            if (list.size() == 1) delete(list.get(0));
            else if (list.size() > 1) {
                for (AppNoForPlan item : list) {
                    if (appCode.equals(item.getAppCode())
                            && workTypeNo.equals(item.getWorkTypeNo())
                            && eomOrderSrc.equals(item.getEomOrderSrc())) {
                        delete(item);
                    }
                }
            }
        }
    }

    /**
     * 根据工单号、工作计划编号查询工作票号
     */
    public String getWtNo(
            String appNo,
            String planNo,
            String appCode,
            String eomOrderSrc,
            String workTypeNo
    ) {
        AppNoForPlan relationData = getDataByPlanNo(planNo);

        if (relationData == null) {
            relationData = getDataByAppNo(appNo, appCode, eomOrderSrc, workTypeNo);
        }

        return relationData != null ? relationData.getWtNo() : "";
    }

    /**
     * 根据计划明细编号查询工作票编号
     */
    public AppNoForPlan getDataByPlanNo(String planNo) {
        if (TextUtils.isEmpty(planNo)) return null;
        else {
            return findData(AppNoForPlanDao.Properties.PlanNo, planNo);
        }
    }

    /**
     * 根据工单编号查询工作票编号
     */
    public AppNoForPlan getDataByAppNo(
            String appNo,
            String appCode,
            String eomOrderSrc,
            String workTypeNo
    ) {
        if (TextUtils.isEmpty(appNo)) return null;

        // 查询本地数据库
        List<AppNoForPlan> items = findByParam(
                new Property[]{AppNoForPlanDao.Properties.AppNo},
                new String[]{appNo});

        switch (items.size()) {
            case 0: //未查到数据
                return null;
            case 1: //查到一条数据
                return items.get(0);
            default: //查到多条数据
                for (AppNoForPlan item : items) {
                    if (appCode.equals(item.getAppCode())
                            && workTypeNo.equals(item.getWorkTypeNo())
                            && eomOrderSrc.equals(item.getEomOrderSrc())) {
                        return item;
                    }
                }
                return null;
        }
    }

    /**
     * 根据工单编号、计划明细编号查询工作票编号
     */
    public AppNoForPlan getDataByAppNoWithPlanNo(
            String appNo,
            String planNo,
            String appCode,
            String eomOrderSrc,
            String workTypeNo
    ) {
        AppNoForPlan relationData = getDataByPlanNo(planNo);

        if (relationData == null) {
            relationData = getDataByAppNo(appNo, appCode, eomOrderSrc, workTypeNo);
        }

        return relationData;
    }

}
